Hibernate Configuration (hibernate.cfg.xml এবং annotations)

Java Technologies - হাইবারনেট (Hibernate) Hibernate এর আর্কিটেকচার |
174
174

Hibernate হল একটি Java ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা Java ক্লাসগুলোকে ডেটাবেস টেবিলের সাথে ম্যাপিং করার জন্য ব্যবহৃত হয়। Hibernate ডেটাবেস অপারেশন সহজ করে তোলে, যেমন ইনসার্ট, আপডেট, ডিলিট এবং সিলেক্ট। Hibernate কনফিগারেশন সাধারণত দুইটি উপায়ে করা হয়:

  1. hibernate.cfg.xml (XML কনফিগারেশন)
  2. Annotations (অ্যানোটেশন ব্যবহার করে কনফিগারেশন)

এখানে Hibernate Configuration এর বিস্তারিত আলোচনা করা হবে, যেখানে hibernate.cfg.xml এবং Annotations ব্যবহার করে কনফিগারেশন কিভাবে করা যায় তা দেখানো হবে।


1. Hibernate Configuration via hibernate.cfg.xml

Hibernate ফ্রেমওয়ার্কের hibernate.cfg.xml ফাইলটি ডেটাবেসের সাথে সংযোগ স্থাপন এবং Hibernate সেশন ফ্যাকটরি কনফিগার করার জন্য ব্যবহৃত হয়। এটি সাধারণত src/main/resources ফোল্ডারে রাখা হয়।

hibernate.cfg.xml Example:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <!-- JDBC Database connection settings -->
    <session-factory>
        <!-- JDBC Database connection settings -->
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/your_database_name</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>

        <!-- JDBC connection pool settings -->
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">20</property>
        <property name="hibernate.c3p0.timeout">300</property>
        <property name="hibernate.c3p0.max_statements">50</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>

        <!-- Specify dialect -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="hibernate.current_session_context_class">thread</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="hibernate.show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="hibernate.c3p0.validate">true</property>

        <!-- Disable the second-level cache -->
        <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="hibernate.show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hibernate.hbm2ddl.auto">update</property>

    </session-factory>
</hibernate-configuration>

Key Properties in hibernate.cfg.xml:

  1. hibernate.connection.driver_class: ড্রাইভার ক্লাস যা JDBC কানেকশনের জন্য ব্যবহৃত হয়।
  2. hibernate.connection.url: ডাটাবেস URL।
  3. hibernate.connection.username এবং hibernate.connection.password: ডাটাবেসের ইউজারনেম এবং পাসওয়ার্ড।
  4. hibernate.dialect: Hibernate এর জন্য ডেটাবেস ডায়ালেক্ট (এটি Hibernate কে বলে দেয় ডেটাবেসের সাথে কিভাবে কাজ করতে হবে)।
  5. hibernate.show_sql: এটি Hibernate কে বলে দেয় যে SQL কোয়েরি আউটপুটে প্রদর্শন করতে হবে কিনা।
  6. hibernate.hbm2ddl.auto: Hibernate এর স্কিমা অটো-জেনারেট করার জন্য ব্যবহৃত হয়, যেমন update, create, বা create-drop

2. Hibernate Configuration via Annotations

Hibernate এ Annotations ব্যবহার করে কনফিগারেশন অনেক সহজ এবং কোড-সেন্ট্রিক পদ্ধতি। আপনি Java ক্লাসে JPA (Java Persistence API) অ্যানোটেশন ব্যবহার করে Hibernate সেটআপ করতে পারেন।

Steps for Hibernate with Annotations:

  1. Hibernate Entity Class with Annotations: Hibernate Entity Class (Java Bean) তৈরি করুন এবং এটি @Entity, @Table, @Id ইত্যাদি অ্যানোটেশন দ্বারা চিহ্নিত করুন।

    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name = "student")
    public class Student {
        @Id
        private int id;
        private String name;
        private String course;
    
        // Getters and setters
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getCourse() {
            return course;
        }
    
        public void setCourse(String course) {
            this.course = course;
        }
    }
    

    এখানে, @Entity ক্লাসটিকে Hibernate Entity হিসেবে চিহ্নিত করে এবং @Table এটি কী টেবিলের সাথে ম্যাপ করা হবে তা নির্ধারণ করে। @Id অ্যানোটেশনটি সেই ফিল্ডকে চিহ্নিত করে যেটি প্রাইমারি কী হিসেবে কাজ করবে।

  2. Hibernate Configuration Class (HibernateUtil): আপনি Hibernate সেশন ফ্যাকটরি তৈরি করতে একটি Utility ক্লাস তৈরি করতে পারেন যা Hibernate সেটআপ পরিচালনা করবে।

    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class HibernateUtil {
        private static SessionFactory sessionFactory;
    
        static {
            try {
                // Create the SessionFactory from hibernate.cfg.xml
                sessionFactory = new Configuration().configure("hibernate.cfg.xml")
                            .addAnnotatedClass(Student.class)  // Adding annotated class
                            .buildSessionFactory();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    
        public static void shutdown() {
            getSessionFactory().close();
        }
    }
    

    এখানে, addAnnotatedClass() ব্যবহার করে Hibernate Entity ক্লাসটি সেশন ফ্যাকটরিতে অ্যাড করা হয়েছে।

  3. Main Class to Test Hibernate Configuration: Hibernate সেশন ফ্যাকটরি ব্যবহার করে ডেটাবেসে ডেটা ইনসার্ট এবং রিট্রিভ করার জন্য Main ক্লাস লিখুন।

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    
    public class MainApp {
        public static void main(String[] args) {
            SessionFactory factory = HibernateUtil.getSessionFactory();
            Session session = factory.getCurrentSession();
    
            try {
                // Create a new Student object
                Student student = new Student();
                student.setName("John Doe");
                student.setCourse("Java Programming");
    
                // Start a transaction
                session.beginTransaction();
    
                // Save the student object
                session.save(student);
    
                // Commit the transaction
                session.getTransaction().commit();
            } finally {
                factory.close();
            }
        }
    }
    

    এই ক্লাসে:

    • Hibernate সেশন ফ্যাকটরি এবং সেশন তৈরি করা হয়েছে।
    • একটি Student অবজেক্ট তৈরি করা হয়েছে এবং ডেটাবেসে সেভ করা হয়েছে।

Key Differences between hibernate.cfg.xml and Annotations Configuration:

ফিচারhibernate.cfg.xmlAnnotations
Configuration StyleXML ফাইল ব্যবহার করা হয়।Java ক্লাসে অ্যানোটেশন ব্যবহার করা হয়।
Ease of Useকিছুটা বেশি জটিল, বড় XML ফাইল লাগে।কমপ্যাক্ট এবং কোড-সেন্ট্রিক, অ্যানোটেশন সরাসরি ব্যবহার করা যায়।
FlexibilityXML ফাইল দ্বারা কনফিগারেশন করা যায়, সেন্ট্রাল কনফিগারেশন।Java ক্লাসে কনফিগারেশন, কোডের মধ্যে থাকতে পারে।
Maintainabilityবেশি সেন্ট্রালাইজড, সব কনফিগারেশন এক জায়গায় থাকে।কোডের মধ্যে ইনলাইন কনফিগারেশন যা সহজে রিফ্যাক্টর করা যায়।
ValidationXML Schema দ্বারা কনফিগারেশন বৈধকরণ।অ্যানোটেশন দ্বারা সরাসরি টাইপ চেকিং।

  • hibernate.cfg.xml: এটি ঐতিহ্যবাহী কনফিগারেশন পদ্ধতি যেখানে XML ফাইলে সমস্ত কনফিগারেশন স্টেটমেন্ট থাকে। এটি বেশি কনফিগারেবল, তবে কিছুটা ভারী হতে পারে এবং XML স্কিমা ফাইল ব্যবহারের প্রয়োজন হতে পারে।
  • Annotations: এটি সহজ এবং কোড-সেন্ট্রিক কনফিগারেশন পদ্ধতি, যেখানে Java ক্লাসে সরাসরি অ্যানোটেশন ব্যবহার করা হয়। এটি বেশি কমপ্যাক্ট এবং রিফ্যাক্টরিং সহজ, তবে এটি একটু কম কনফিগারেবল হতে পারে।

উপযুক্ত কনফিগারেশন পদ্ধতি নির্বাচন নির্ভর করে আপনার প্রকল্পের আকার এবং প্রয়োজনীয়তার উপর।

Content added By
Promotion